package com.woniu108.order.client;

import com.woniu108.carService.commos.dto.*;
import com.woniu108.carService.commos.model.Result;
import com.woniu108.order.model.form.GetOneUserForm;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

/**
 * @author LY
 */
@FeignClient(name = "person-server",path = "/person")
public interface PersonClient {

    /**
     * 获取用户信息
     * @param form 昵称，真名，电话号码
     * @return 用户信息
     */
    @GetMapping("/userInfo/getOneUser.c")
    Result<UserInfoDto> getOneUser(@RequestBody GetOneUserForm form);

    /**
     * 获取用户信息
     * @param userId 用户id
     * @return 用户信息
     */
    @GetMapping("/userInfo/getByUserId/{userId}.c")
    Result<UserInfoDto> getByUserId(@PathVariable("userId")String userId);

    /**
     * 获取门店管理员信息
     * @param storeAdminId 门店管理员id
     * @return 门店管理员信息
     */
    @GetMapping("/storeAdmin/getStoreAdminInfoById/{storeAdminId}.c")
    Result<StoreAdminDto> getStoreAdminInfoById(@PathVariable("storeAdminId")String storeAdminId);

    /**
     * 获取门店信息
     * @param storeId 门店id
     * @return 门店信息
     */
    @GetMapping("/store/getStoreById/{storeId}.c")
    Result<StoreDto> getStoreById(@PathVariable("storeId") Integer storeId);

    /**
     * 用户积分增加并记录到log
     * @param userId 用户ID
     * @param score 变动积分
     * @return newScore 变动后积分
     */
    @GetMapping("/userInfo/addUserScore.c")
    @ApiOperation("增加用户积分")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "userId",value ="用户ID" ),
            @ApiImplicitParam(name = "score",value ="变动积分" ),
            @ApiImplicitParam(name = "scoreType",value ="积分类型(购物、签到)" )
    })
    public Result<Integer> addUserScore(@RequestParam("userId")String userId,@RequestParam("score")Integer score,@RequestParam("scoreType")Integer scoreType);

    /**
     * 用户积分减少并记录到log
     * @param userId 用户ID
     * @param score 变动积分
     * @return newScore变动后积分
     */
    @GetMapping("/userInfo/reduceUserScore.c")
    @ApiOperation("减少用户积分")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "userId",value ="用户ID" ),
            @ApiImplicitParam(name = "score",value ="变动积分" ),
            @ApiImplicitParam(name = "scoreType",value ="积分类型(购物、签到)" )
    })
    public Result<Integer> reduceUserScore(@RequestParam("userId") String userId, @RequestParam("score")Integer score, @RequestParam("scoreType")Integer scoreType);


    /**
     * 单一id查找管理员信息
     * @param adminId 管理员ID
     * @return 管理员dto对象  管理员ID 管理员权限编号 管理员权限名称 管理员手机号 管理员姓名 管理门店编号 门店名称 管理员状态ID
     */
    @GetMapping("/adminInfo/getByAdminId/{adminId}.api")
    @ApiOperation("单一id查找管理员信息")
    @ApiImplicitParam(name = "adminId",value ="管理员ID" )
    public Result<AdminInfoDto> getByAdminId(@PathVariable("adminId")String adminId);

    /**
     * 添加管理员操作历史记录
     * @param adminId 管理员编号
     * @param methodName 操作功能名称
     * @return result 是否正常访问接口结果
     */
    @GetMapping("/adminHistory/addAdminHistory.api")
    @ApiOperation("添加管理员操作历史记录")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "adminId",value = "管理员编号"),
            @ApiImplicitParam(name = "methodName",value = "操作功能名称")
    })
    public Result addAdminHistory(@RequestParam("adminId") String adminId,@RequestParam("methodName") String methodName);
}
